from django.shortcuts import render
from django.views import View
from django import http
from django.core.cache import cache
import json
import logging
import re

from meiduo_01.utils.views import LoginRequiredJsonMixin
from areas.models import Area
from meiduo_01.utils.response_code import RETCODE
from users.models import Address
from . import constants

# Create your views here.
logger = logging.getLogger('django')





class AreaView(LoginRequiredJsonMixin, View):
    """省市区联动"""
    def get(self, req):

        # 接收参数
        # json_str = req.body('area_id')
        # json_dict = json.loads(json_str)

        area_id= req.GET.get('area_id')

        # 判断当前要查询的数据是省还是区县，是否有area_id
        if not area_id:
            # 没有，查询省级数据
            # 获取并判断有无缓存
            province_list = cache.get('province_list')
            if not province_list:
                try:
                    # Area.objects.filter(属性名__条件表达式=值)
                    province_model_list = Area.objects.filter(parent__isnull=True)
                    # 需要将模型列表转化成 字典列表
                    province_list = []
                    for province_model in province_model_list:
                        # province_model = {
                        #     'id':
                        # }
                        # province_list.append(province_model)
                        province_dict = {
                            'id': province_model.id,
                            'name': province_model.name
                        }
                        province_list.append(province_dict)
                        cache.set('province_list', province_list, 3600)

                    # return http.JsonResponse({'code': RETCODE.OK, 'errmsg': '查询省级数据成功', 'province_list': province_list})
                except Exception as e:
                    logger.error(e)
                    return http.JsonResponse({'code': RETCODE.DBERR, 'errmsg': '查询省级数据失败'})
            # else:
            # 调整至相同代码只出现一次
            return http.JsonResponse({'code': RETCODE.OK, 'errmsg': '查询省级数据成功', 'province_list': province_list})

        else:
            # 有，查询区县
            sub_data = cache.get('sub_data'+area_id)  # TODO 为啥加area_id,因为存的时候是这样存的？？

            if not sub_data:
                try:
                    # 【如果】 area_id为省的id，parent_model 为对应的那个省
                    parent_model = Area.objects.get(id=area_id)
                    # 查出这个省所对应的所有的市
                    sub_model_list = parent_model.subs.all()

                    # 将子集模型列表转化成字典列表
                    subs = []
                    for sub_model in sub_model_list:  # 市的模型列表
                        sub_dict = {
                            'id': sub_model.id,
                            'name': sub_model.name,  # 市的名字
                            # 'subs':{
                            #     'id'
                            # }
                        }
                        subs.append(sub_dict)
                    # 构造子集JSON数据
                    sub_data = {
                        'id': parent_model.id,
                        'name': parent_model.name,  # 省的名字
                        'subs': subs
                    }
                    cache.set('sub_data'+area_id, sub_data, 3600)
                    # return http.JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK', 'sub_data': sub_data})

                except Exception as e:
                    logger.error(e)
                    return http.JsonResponse({'code': RETCODE.OK, 'errmsg': '查询数据失败'})
            # 响应市或区县的JSON数据
            return http.JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK', 'sub_data': sub_data})